Unity

您所在的位置:网站首页 unity 动画切换 闪 Unity

Unity

2023-11-24 02:53| 来源: 网络整理| 查看: 265

系列文章目录         一 、 人物移动和转向         二、  人物跳跃和落地         三、  人物攻击和判定         四、  人物受伤和死亡

目录

前言

一、人物受伤逻辑分析

二、人物受伤和死亡动画逻辑

三、人物受伤脚本实现

1.Damageable脚本(受击对象上)

2.IMessageReceiver接口

2.IMessageReceiver接口实现(PlayerController上)

总结

前言

上一章记录了人物的攻击实现和攻击有效判定,这里实现人物的受伤判定。

实现效果:(敌人的实现见下一章)

提示:以下是本篇文章正文内容,下面案例可供参考

一、人物受伤逻辑分析

三个主要脚本:

Damageable脚本,挂在受攻击对象上,负责接收从对方武器(meleeWeapon)传递的伤害信息,对伤害(Message)进行处理 --> 根据不同的受击效果调用不同委托事件  -->   最后将必要的信息传递给伤害接收者。(当然不一定要有接收者,看有没有需要复杂信息传递)

IMessageReceiver接口: 自行定义的接口,在有需要接收伤害信息的对象上实现接口,实现在不同对象受伤或死亡的复杂伤害信息接收。

二、人物受伤和死亡动画逻辑

定义两个trigger参数,连接到在Anystate上;

三、人物受伤脚本实现 1.Damageable脚本(受击对象上)

这个脚本存储了玩家的血量,对伤害的接收处理,和不同伤害事件的响应。

编辑器中的设置:

代码如下(示例):

using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; using UnityEngine.UI; //My受伤反馈脚本 namespace MyPlayer { public partial class MyDamageable : MonoBehaviour { [SerializeField] protected int curHitPoints;//当前血量 protected Action schedule;//多播委托 protected float myInvincibleTime = 3.5f;//无敌时间 public int myMaxHipPoints;//最大血量 public bool invincible = false;//无敌的 public TextMesh m_HitPointsShow;//血量显示 public UnityEvent OnDamage, OnDeath, OnResetDamage, OnBecmeVulnerable, OnHitWhileInvulunerable;//不同的受伤事件 //[EnforceType(typeof(MyMessage.IMessageReceiver))] //public MonoBehaviour[] DemageReceiver; public List onDamageMessageReceivers;//伤害接收者,不一定有必要 public int CurHitPoint { get { return curHitPoints; } } public void OnReSpawn()//复活 { invincible = true; myInvincibleTime = 3.5f; OnResetDamage.Invoke(); curHitPoints = myMaxHipPoints; } private void Awake() { curHitPoints = myMaxHipPoints; invincible = false;//开始有一段无敌时间 if(m_HitPointsShow) m_HitPointsShow.text = curHitPoints.ToString(); } //受到攻击时调用 public bool OnGetDamage(MyDamageable.DamageMessage data) { MyMessage.MesssageType type; if (invincible || curHitPoints


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3